package com.example.demo.repository;

import com.example.demo.model.Course;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;
import java.util.Optional;

public interface CourseRepository extends JpaRepository<Course, Integer> {
    /**
     * 根据课程 ID 查询课程，并同时加载该课程关联的学生信息
     * @param id 课程 ID
     * @return 包含学生信息的课程 Optional 对象
     */
    @Query("SELECT c FROM Course c JOIN FETCH c.students WHERE c.courseId = ?1")
    Optional<Course> findByIdWithStudents(Integer id);

    /**
     * 根据教师的用户 ID 查询课程，并同时加载课程关联的教师信息
     * @param userId 教师的用户 ID
     * @return 符合条件的课程列表
     */
    @Query("SELECT c FROM Course c JOIN FETCH c.teacher WHERE c.teacher.userId = :userId")
    List<Course> findByTeacherUserId(@Param("userId") Integer userId);

    /**
     * 根据学生的用户 ID 查询其所选的课程
     * @param userId 学生的用户 ID
     * @return 符合条件的课程列表
     */
    @Query("SELECT c FROM Course c JOIN c.students s WHERE s.userId = :userId")
    List<Course> findByStudentId(@Param("userId") Integer userId);

    /**
     * 根据教师 ID、当前日期和星期筛选符合条件的课程
     * @param teacherId 教师 ID
     * @return 符合条件的课程列表
     */
    @Query(value = "SELECT * FROM courses WHERE teacher_id = :teacherId AND CURDATE() BETWEEN start_time AND end_time AND FIND_IN_SET(UPPER(DAYNAME(CURDATE())), openday) > 0", nativeQuery = true)
    List<Course> findCoursesByTeacherIdForToday(@Param("teacherId") Integer teacherId);
    @Query("SELECT c FROM Course c ")
    List<Course> findAll();
}